package arp.analiseprestadores;

import arp.analiseprestadores.dados.RepositorioPrestador;
import arp.analiseprestadores.model.Prestador;
import au.com.bytecode.opencsv.CSVReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;

/**
 *
 * @author thiago.c.silva
 */
public class FachadaARP {
    private static final Logger LOGGER = Logger.getLogger(FachadaARP.class);
    
    private static FachadaARP instancia = null;
    
    private FachadaARP() {}
    
    public static FachadaARP getInstancia() {
        if (instancia == null) {
            instancia = new FachadaARP();
        }
        
        return instancia;
    }
    
    public void conciliarPrestadores() {
        
    }
    
    public void carregarArquivo(File arquivo, boolean isOrigem) throws Exception {
        List<Prestador> prestadores = new ArrayList<Prestador>();
        //CSVReader leitor = new CSVReader(new FileReader(arquivo));
        CSVReader leitor = new CSVReader(new InputStreamReader(new FileInputStream(arquivo), "UTF-8"));
        
        String[] linha;
        while ((linha = leitor.readNext()) != null) {
            prestadores.add(new Prestador(linha[0], linha[1]));
            
            LOGGER.warn(linha[0] + "\t" + linha[1]);
        }

        if (isOrigem) {
            inserirPrestadoresOrigem(prestadores);
        } else {
            inserirPrestadoresDestino(prestadores);
        }
    }
    
    public void inserirPrestadoresOrigem(List<Prestador> prestadores) {
        RepositorioPrestador.getInstancia().inserirBatch(prestadores, true);        
    }
    
    public void inserirPrestadoresDestino(List<Prestador> prestadores) {
        RepositorioPrestador.getInstancia().inserirBatch(prestadores, false);
    }
    
    public List<Prestador> consultarTodosPrestadoresOrigem() {
        return RepositorioPrestador.getInstancia().findAll(true);
    }
    
    public List<Prestador> consultarTodosPrestadoresDestino() {
        return RepositorioPrestador.getInstancia().findAll(false);
    }
    
    public List<Prestador> consultarDiferencaPrestadoresOrigemDestino() {
        return RepositorioPrestador.getInstancia().consultarDiferencaPrestadores(true);
    }
    
    public List<Prestador> consultarDiferencaPrestadoresDestinoOrigem() {
        return RepositorioPrestador.getInstancia().consultarDiferencaPrestadores(false);
    }
    
    public List<Map<String, String>> consultarInterseccaoPrestadores() {
        return RepositorioPrestador.getInstancia().consultarInterseccaoPrestadores();
    }    
    
    public void resetarBase() {
        RepositorioPrestador.getInstancia().resetarBase();
    }
    
}
